Laravel এর আর্কিটেকচার ডিজাইনটি MVC (Model-View-Controller) প্যাটার্নের উপর ভিত্তি করে তৈরি করা হয়েছে। এটি একটি খুবই জনপ্রিয় ওয়েব অ্যাপ্লিকেশন আর্কিটেকচার যা কোডের পুনর্ব্যবহারযোগ্যতা, সহজতা এবং রক্ষণাবেক্ষণ বাড়ায়। Laravel-এর আর্কিটেকচার এমনভাবে তৈরি করা হয়েছে যাতে ডেভেলপাররা খুব সহজে স্কেলযোগ্য এবং মডুলার অ্যাপ্লিকেশন তৈরি করতে পারেন।
Laravel মূলত MVC আর্কিটেকচারে কাজ করে। MVC প্যাটার্নটি তিনটি প্রধান কম্পোনেন্ট নিয়ে গঠিত:
Model:
View:
Controller:
Laravel এর রাউটিং সিস্টেম খুবই শক্তিশালী এবং নমনীয়। রাউটিংয়ের মাধ্যমে ইউআরএল (URL) গুলোকে নির্দিষ্ট কন্ট্রোলারের মেথডের সাথে ম্যাপ করা হয়। প্রতিটি রাউট একটি নির্দিষ্ট HTTP অনুরোধ (GET, POST, PUT, DELETE) পরিচালনা করে এবং তা কন্ট্রোলারে পাঠায়।
উদাহরণ:
Route::get('/users', 'UserController@index');
Middleware হচ্ছে একটি ফিল্টারিং মেকানিজম যা HTTP অনুরোধ প্রক্রিয়াকরণের আগে এবং পরে কোড চালায়। Middleware নিরাপত্তা, অথেনটিকেশন এবং লজিক্যাল ফিল্টারিংয়ের জন্য ব্যবহৃত হয়।
উদাহরণ:
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', 'DashboardController@index');
});
Laravel এর Service Container একটি পাওয়ারফুল টুল যা ডিপেনডেন্সি ইনজেকশন ম্যানেজ করতে সাহায্য করে। এটি ক্লাসগুলোর ডিপেনডেন্সি সমাধান করে এবং ইনজেকশন করার প্রক্রিয়াটি সহজতর করে।
Service Providers Laravel অ্যাপ্লিকেশনের বুটস্ট্র্যাপিং কনফিগারেশন পরিচালনা করে। Service Providers এর মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন অংশে সেবা সরবরাহ করা হয়।
উদাহরণ:
class AppServiceProvider extends ServiceProvider
{
public function register()
{
// Binding classes to the service container
}
}
Eloquent হল Laravel এর ORM সিস্টেম, যা ডাটাবেজের সাথে সরাসরি কাজ করতে সাহায্য করে। এটি ক্লাস ও অবজেক্টের মাধ্যমে ডাটাবেজ টেবিলকে মডেল করে। সহজ এবং স্পষ্ট সিনট্যাক্স ব্যবহার করে ডেটাবেস অপারেশন করা যায়।
উদাহরণ:
$users = User::all();
Laravel এর Blade একটি সহজ কিন্তু শক্তিশালী টেমপ্লেট ইঞ্জিন। Blade ব্যবহার করে ডায়নামিক কন্টেন্টকে View-তে ইনজেক্ট করা হয় এবং বিভিন্ন ধরনের লজিক সহজে প্রয়োগ করা যায়।
উদাহরণ:
@foreach ($users as $user)
{{ $user->name }}
@endforeach
Laravel এর ইভেন্ট এবং ব্রডকাস্টিং ব্যবস্থাপনা খুবই শক্তিশালী। ইভেন্ট সিস্টেমের মাধ্যমে অ্যাপ্লিকেশনে বিভিন্ন ইভেন্টের উপর ভিত্তি করে কাজ করা যায়। Broadcasting ব্যবহার করে রিয়েল-টাইম ডেটা পাঠানো যায়।
উদাহরণ:
event(new UserRegistered($user));
Laravel এর Queue ব্যবস্থাপনা ব্যাকগ্রাউন্ড প্রসেসিং পরিচালনা করে। Queue-তে বিভিন্ন কাজ বা জব রাখতে পারেন যা পরে প্রসেস করা হয়। এটি অ্যাপ্লিকেশনের রেসপন্স টাইমকে দ্রুত করে।
উদাহরণ:
dispatch(new SendEmailJob($user));
Laravel এর Task Scheduling ব্যবস্থাপনা ক্রনজব ম্যানেজ করার কাজ সহজ করে দেয়। schedule
মেথডের মাধ্যমে নির্দিষ্ট কাজকে নির্দিষ্ট সময়ে স্বয়ংক্রিয়ভাবে চালানো যায়।
উদাহরণ:
$schedule->command('email:send')->daily();
Laravel অ্যাপ্লিকেশনের নিরাপত্তার জন্য অনেকগুলো ফিচার প্রদান করে:
Laravel-এর আর্কিটেকচার অত্যন্ত নমনীয় এবং উন্নত। এটি MVC প্যাটার্ন অনুসরণ করে এবং একাধিক কম্পোনেন্টের সমন্বয়ে তৈরি হয়েছে, যা আপনার অ্যাপ্লিকেশন তৈরি ও রক্ষণাবেক্ষণ সহজ করে। Service Container, Eloquent ORM, Blade, Middleware এবং অন্যান্য কম্পোনেন্টগুলো Laravel-কে একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক করে তুলেছে।
Laravel এর Request Lifecycle একটি বিস্তারিত এবং সুগঠিত প্রক্রিয়া যা একটি ইনকামিং HTTP বা Console অনুরোধকে গ্রহণ করে, তার প্রক্রিয়াকরণ শুরু করে এবং শেষে একটি Response প্রদান করে। এই প্রক্রিয়ার মধ্যে Service Providers একটি অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। Laravel অ্যাপ্লিকেশন বুটস্ট্র্যাপ করতে এবং প্রয়োজনীয় সার্ভিসগুলো লোড করতে Service Providers ব্যবহৃত হয়।
Laravel Request Lifecycle শুরু হয় যখন অ্যাপ্লিকেশন একটি HTTP অনুরোধ গ্রহণ করে এবং শেষ হয় যখন একটি HTTP Response তৈরি করা হয় এবং ব্রাউজারে পাঠানো হয়। এই পুরো প্রক্রিয়াটি Laravel-এর বিভিন্ন কম্পোনেন্ট, যেমন Kernels, Middleware, Service Providers, এবং Routing এর উপর নির্ভর করে।
Laravel-এর Request Lifecycle মূলত কয়েকটি প্রধান ধাপে বিভক্ত:
Entry Point: Public ডিরেক্টরিতে থাকা index.php
ফাইলটি Laravel-এর প্রথম এন্ট্রি পয়েন্ট। এটি HTTP অনুরোধ গ্রহণ করে এবং শুরুতে লোড হওয়া সমস্ত ফাইল ও ক্লাসগুলো চালায়।
Autoloading: Composer এর মাধ্যমে প্রয়োজনীয় সকল ডিপেনডেন্সি এবং ফাইলগুলো লোড হয়, যা অ্যাপ্লিকেশন চালাতে সহায়ক।
Bootstrap: Laravel-এর বুটস্ট্র্যাপ ফোল্ডারে থাকা app.php
ফাইল সমস্ত Service Providers এবং অন্যান্য গুরুত্বপূর্ণ সেটআপ ইনিশিয়ালাইজ করে।
HTTP/Console Kernels: Kernels হচ্ছে Laravel-এর প্রধান প্রসেসিং ইউনিট, যা HTTP বা Console অনুরোধগুলো পরিচালনা করে। HTTP Kernel HTTP অনুরোধকে প্রসেস করে এবং Console Kernel কমান্ড লাইন ইনপুট পরিচালনা করে।
Service Providers: সমস্ত সার্ভিস এবং ফিচারগুলোর জন্য দায়ী Service Providers লোড হয়। এগুলোর মাধ্যমেই সমস্ত Laravel কম্পোনেন্ট বুটস্ট্র্যাপ হয়।
Routing: একটি HTTP অনুরোধের জন্য নির্দিষ্ট Route খুঁজে বের করা হয় এবং সেই অনুযায়ী Controller বা ক্লোজার চালানো হয়।
Middleware: Routing এর আগে এবং পরে Middleware চালানো হয়, যা অনুরোধ যাচাই বা নির্দিষ্ট কাজ করার জন্য ব্যবহৃত হয়।
Response: Controller বা Route যে Response প্রদান করে তা ব্রাউজারে পাঠানো হয় এবং Request Lifecycle শেষ হয়।
Laravel-এর Request Lifecycle শুরু হয় public/index.php
ফাইল থেকে। এটি PHP কোডের মাধ্যমে সমস্ত ডিপেনডেন্সি ও Composer এর autoload ফাইল লোড করে। এরপর, এটি অ্যাপ্লিকেশনটি চালানোর জন্য প্রথমে app.php
ফাইলটিকে ইনিশিয়ালাইজ করে এবং এর মধ্যে থাকা প্রয়োজনীয় সেটআপগুলো প্রস্তুত করে।
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
Laravel-এ দুই ধরনের Kernels রয়েছে:
HTTP Kernel:
app/Http/Kernel.php
ফাইলে থাকে।Console Kernel:
app/Console/Kernel.php
ফাইলে থাকে।Laravel অ্যাপ্লিকেশনের সবচেয়ে গুরুত্বপূর্ণ অংশগুলোর মধ্যে একটি হলো Service Providers। এগুলো Laravel অ্যাপ্লিকেশনের সার্ভিস বুটস্ট্র্যাপ করার প্রাথমিক মাধ্যম। Laravel-এর Service Container-এ সার্ভিস রেজিস্টার করা থেকে শুরু করে অ্যাপ্লিকেশন লজিক লোড করা পর্যন্ত, Service Providers বিভিন্ন কাজ সম্পন্ন করে।
Laravel এর Service Providers দুইটি মূল ধাপে কাজ করে:
Register Method:
register()
মেথড অ্যাপ্লিকেশনের ইনিশিয়াল লোডিং পর্যায়ে কাজ করে এবং প্রয়োজনীয় সার্ভিসগুলো রেজিস্টার করে।Boot Method:
boot()
মেথডটি তখনই কাজ করে যখন সমস্ত সার্ভিস রেজিস্টার হয়ে যায়। এখানে প্রয়োজনীয় অ্যাপ্লিকেশন সেটআপ যেমন ইভেন্ট লিসেনার, রুট সেটআপ ইত্যাদি করা হয়।Laravel অ্যাপ্লিকেশনে Service Providers নিবন্ধন করতে হলে config/app.php
ফাইলে প্রোভাইডার লিস্টে তাদের যোগ করতে হয়। উদাহরণস্বরূপ, কিছু ডিফল্ট প্রোভাইডার Laravel এ থাকে:
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
// অন্যান্য সার্ভিস প্রোভাইডার...
]
আপনি নিজেই একটি Service Provider তৈরি করে তা নিবন্ধন করতে পারেন:
প্রথমে প্রোভাইডার তৈরি করতে হলে কমান্ডটি চালান:
php artisan make:provider CustomServiceProvider
প্রোভাইডার তৈরি হলে আপনি তার register()
এবং boot()
মেথডে প্রয়োজনীয় কোড যোগ করতে পারেন। এরপর config/app.php
ফাইলের providers
অ্যারের মধ্যে প্রোভাইডারটি যোগ করুন।
'providers' => [
App\Providers\CustomServiceProvider::class,
],
Service Binding:
Dependency Injection:
Modularity:
Eager vs Lazy Loading:
আপনি যদি একটি কাস্টম সার্ভিস তৈরি করতে চান এবং সেটিকে সার্ভিস কন্টেইনারে নিবন্ধন করতে চান, তাহলে নিচের মত করে একটি কাস্টম প্রোভাইডার তৈরি করতে পারেন:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\SomeService;
class CustomServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(SomeService::class, function ($app) {
return new SomeService();
});
}
public function boot()
{
// Bootstrapping logic here
}
}
এই প্রোভাইডারটি config/app.php
ফাইলের প্রোভাইডার লিস্টে যোগ করলে অ্যাপ্লিকেশন এর SomeService
সার্ভিসটি অ্যাক্সেস করতে পারবে।
Laravel এর Service Providers পুরো Request Lifecycle এর একটি কেন্দ্রবিন্দু হিসেবে কাজ করে। এরা ডিপেন্ডেন্সি ইনজেকশন পরিচালনা করা থেকে শুরু করে অ্যাপ্লিকেশনের সমস্ত সার্ভিস এবং ক্লাসগুলোকে রেজিস্টার ও বুটস্ট্র্যাপ করে। নতুন সেবা যোগ করা বা বিদ্যমান সেবাগুলোকে কাস্টমাইজ করার জন্য Service Providers-এর ব্যবহার Laravel-কে অত্যন্ত মডুলার এবং ডাইনামিক ফ্রেমওয়ার্কে পরিণত করেছে।
লারাভেল-এর Service Container হল একটি গুরুত্বপূর্ণ কম্পোনেন্ট যা Dependency Injection (DI) ম্যানেজ করতে ব্যবহৃত হয়। এটি ক্লাসের ইনস্ট্যান্স তৈরি করা এবং তাদের মধ্যে ডিপেনডেন্সি ম্যানেজ করার কাজ করে, যা অ্যাপ্লিকেশনের কোডকে আরো পরিষ্কার, পোর্টেবল এবং পরীক্ষাযোগ্য করে।
Laravel-এর Service Container হল একটি শক্তিশালী Dependency Injection Container, যা ক্লাসের ইনস্ট্যান্স তৈরি এবং তাদের মধ্যে ডিপেনডেন্সি ম্যানেজ করার জন্য ব্যবহৃত হয়। এটি Laravel অ্যাপ্লিকেশনের কেন্দ্রীয় অংশ, যেখানে বিভিন্ন সার্ভিস এবং ক্লাসের জন্য ইনজেকশন প্রক্রিয়া সহজতর করা হয়।
Laravel-এর Service Container খুব কম কনফিগারেশন ছাড়াই কাজ করে। যখন আপনি একটি ক্লাসকে সার্ভিস কন্টেইনারে রেজিস্টার করেন, তখন কন্টেইনার স্বয়ংক্রিয়ভাবে তার ডিপেনডেন্সি রেজলভ করে দেয়, অর্থাৎ ইনজেকশন প্রয়োজনীয় ক্লাসগুলোর ইনস্ট্যান্স তৈরি করে।
Service Container ব্যবহার করার সময় কিছু বিশেষ দিক রয়েছে:
Service Container-এ ক্লাস বা ইন্টারফেসগুলোর জন্য কিভাবে ব্যান্ডিং করতে হয় তার মূল পদ্ধতি হলো:
app()->bind('ClassName', function () {
return new ClassName();
});
এটি ClassName
নামে একটি ক্লাসের জন্য ইনস্ট্যান্স তৈরি করবে।
আপনি ইন্টারফেসগুলোকে নির্দিষ্ট ক্লাসের সাথে বেঁধে রাখতে পারেন, যা আপনাকে ইন্টারফেস ভিত্তিক প্রোগ্রামিং করার সুযোগ দেয়:
app()->bind('App\Contracts\MyInterface', 'App\Implementations\MyImplementation');
এটি যখন MyInterface
ব্যবহার করা হবে, তখন এটি স্বয়ংক্রিয়ভাবে
-কে ইনজেক্ট করবে।
Contextual Binding ব্যবহার করে আপনি নির্দিষ্ট প্রসঙ্গে ভিন্ন ইনস্ট্যান্স ইনজেক্ট করতে পারেন:
app()->when(SomeClass::class)
->needs(MyInterface::class)
->give(MyImplementation::class);
এটি SomeClass
যখন ইনজেক্ট করা হবে তখন MyImplementation
ব্যবহার করবে।
Contextual Attributes ব্যবহার করে আপনি আরও স্পষ্টভাবে ইনজেক্ট করতে পারেন। উদাহরণস্বরূপ:
app()->when(SomeClass::class)
->needs('$param')
->give('value');
এটি $param
-এ value
ইনজেক্ট করবে।
Primitive data types যেমন string, int ইত্যাদি কন্টেইনারের মাধ্যমে ইনজেক্ট করা যায়:
app()->bind('config_key', 'value');
এখন config_key
নামক ইনজেকশনটি value
হবে।
Variadic parameters ব্যবহার করে একাধিক ইনপুট ইনজেক্ট করা যায়:
app()->bind('SomeClass', function ($app, array $parameters) {
return new SomeClass(...$parameters);
});
এটি SomeClass
-এ নির্দিষ্ট ইনপুট ইনজেক্ট করবে।
Tagging সুবিধা দেয় যাতে আপনি একই টাইপের ইনস্ট্যান্সগুলোকে গ্রুপ করে রাখতে পারেন। উদাহরণস্বরূপ:
app()->tag(['service1', 'service2'], 'services');
এখন আপনি services
ট্যাগ ব্যবহার করে গ্রুপের সব সার্ভিস একসাথে পেতে পারেন।
Existing bindings-কে এক্সটেন্ড করতে extend
মেথড ব্যবহার করা হয়:
app()->extend('ClassName', function ($app, $parameters) {
return new ExtendedClassName();
});
এটি ClassName
ইনস্ট্যান্সের উপর ভিত্তি করে একটি নতুন ক্লাস তৈরি করবে।
make
মেথড ব্যবহার করে কন্টেইনার থেকে ইনস্ট্যান্স তৈরি করা যায়:
$instance = app()->make('ClassName');
এটি ClassName
এর একটি নতুন ইনস্ট্যান্স প্রদান করবে।
Laravel-এর অটোমেটিক ইনজেকশন (Automatic Injection) হল এমন একটি সুবিধা যা আপনাকে ম্যানুয়ালি নির্দিষ্ট করে কোনো ডিপেনডেন্সি (dependency) পাস করার প্রয়োজন ছাড়াই আপনার অ্যাপ্লিকেশনের ক্লাস এবং মেথডে নির্দিষ্ট ডিপেনডেন্সি (যেমন সার্ভিস, ক্লাস ইত্যাদি) স্বয়ংক্রিয়ভাবে ইনজেক্ট করার সুযোগ দেয়। এটি Laravel-এর ডিপেনডেন্সি ইনজেকশন কন্টেইনারের মাধ্যমে কাজ করে।
কীভাবে Laravel অটোমেটিক ইনজেকশন কাজ করে:
কন্সট্রাকটর ইনজেকশন: যখন আপনি কোনো ক্লাসের কন্সট্রাকটরে নির্দিষ্ট ডিপেনডেন্সি টাইপ-হিন্ট করেন, Laravel স্বয়ংক্রিয়ভাবে সেই নির্দিষ্ট ক্লাস বা সার্ভিসকে ইনজেক্ট করে।
উদাহরণ:
এখানে UserService
ক্লাসটি কন্সট্রাকটর ইনজেকশন দ্বারা অটোমেটিকভাবে সরবরাহ করা হবে।
class UserController extends Controller
{
protected $userService;
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
}
মেথড ইনজেকশন: কন্সট্রাকটর ছাড়াও, আপনি মেথডের প্যারামিটারেও ডিপেনডেন্সি ইনজেকশন করতে পারেন। Laravel স্বয়ংক্রিয়ভাবে মেথড কল করার সময় ইনজেকশনের জন্য প্রয়োজনীয় ডিপেনডেন্সি সরবরাহ করবে।
উদাহরণ:
public function store(Request $request, UserService $userService)
{
$userService->create($request->all());
}
রাউট মেথড ইনজেকশন: Laravel-এর রাউট মেথডেও অটোমেটিক ইনজেকশন কাজ করে। রাউট ডিফাইন করার সময় যদি আপনি কোনো নির্দিষ্ট ডিপেনডেন্সি টাইপ-হিন্ট করেন, Laravel স্বয়ংক্রিয়ভাবে সেগুলো ইনজেক্ট করে।
উদাহরণ:
public function store(Request $request, UserService $userService)
{
$userService->create($request->all());
}
Laravel অটোমেটিক ইনজেকশন ব্যবহারের সুবিধা:
Laravel-এর ডিপেনডেন্সি ইনজেকশন কন্টেইনার অটোমেটিক ইনজেকশনের মাধ্যমে ডেভেলপারদের কাজকে আরও সহজ এবং দ্রুত করে তোলে।
Laravel-এর Service Container বিভিন্ন ইভেন্টের মাধ্যমে কাজ করে, যেমন Binding, Resolving ইভেন্টগুলো। আপনি কাস্টম ইভেন্ট হ্যান্ডলার তৈরি করতে পারেন যা নির্দিষ্ট পরিস্থিতিতে সক্রিয় হয়।
Laravel-এর Service Container PSR-11 (Container Interface) কমপ্লায়েন্ট, যা PHP ফ্রেমওয়ার্ক এবং লাইব্রেরিগুলোর মধ্যে ইন্টারঅপারেবিলিটি বাড়ায়। PSR-11-এর মান অনুসারে, কন্টেইনারের কিছু নির্দিষ্ট মেথড রয়েছে, যেমন get()
এবং has()
, যা ইনস্ট্যান্স রেজলভ ও চেক করার কাজ করে।
Laravel-এর Service Container একটি অত্যন্ত শক্তিশালী এবং কার্যকর টুল, যা ডিপেনডেন্সি ইনজেকশনের মাধ্যমে আপনার অ্যাপ্লিকেশন উন্নয়ন প্রক্রিয়াকে সহজ করে। এটি বিভিন্ন ধরনের ব্যান্ডিং, ইনজেকশন এবং কাস্টমাইজেশন সুবিধা প্রদান করে, যা উন্নত Laravel অ্যাপ্লিকেশন তৈরিতে সাহায্য করে।
Service Providers হল Laravel-এর অ্যাপ্লিকেশনের মূল অংশ যা সমস্ত সার্ভিস এবং ক্লাসকে রেজিস্টার এবং বুটস্ট্র্যাপ করতে ব্যবহৃত হয়। এগুলি Laravel-এর Service Container-এর সাথে কাজ করে এবং অ্যাপ্লিকেশনকে কার্যকরী এবং মডুলার রাখতে সাহায্য করে।
Laravel-এর Service Providers অ্যাপ্লিকেশনের কার্যকারিতা বাড়ায়। তারা অ্যাপ্লিকেশন বুটস্ট্র্যাপ করার সময় প্রয়োজনীয় সমস্ত সার্ভিস ও ফিচার রেজিস্টার করে। Service Providers মূলত দুটি মেথডের মাধ্যমে কাজ করে: register()
এবং boot()
।
Service Provider তৈরি করতে, Laravel-এর কমান্ড লাইন টুল ব্যবহার করতে পারেন:
php artisan make:provider CustomServiceProvider
এটি app/Providers
ডিরেক্টরিতে একটি নতুন প্রোভাইডার ফাইল তৈরি করবে। উদাহরণস্বরূপ, CustomServiceProvider.php
।
register()
মেথডে আপনি সমস্ত সার্ভিস রেজিস্টার করেন। এখানে আপনি Service Container-এ নির্ভরতা যুক্ত করেন। এই মেথডটি অ্যাপ্লিকেশন চালু হওয়ার সময় চলবে, কিন্তু সার্ভিসগুলো বুটস্ট্র্যাপ করার আগে।
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class CustomServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('SomeService', function ($app) {
return new SomeService();
});
}
}
এখানে, SomeService
ক্লাসটি সার্ভিস কন্টেইনারে সিঙ্গলটন হিসেবে রেজিস্টার করা হয়েছে, অর্থাৎ একটি ইনস্ট্যান্স পুরো অ্যাপ্লিকেশনের মধ্যে শেয়ার হবে।
boot()
মেথডটি তখনই কল হয় যখন সমস্ত সার্ভিস রেজিস্টার হয়ে যায়। এখানে আপনি বিভিন্ন কার্যক্রম সম্পাদন করতে পারেন যেমন ইভেন্ট লিসেনার রেজিস্টার করা, রুট সেটআপ করা ইত্যাদি।
public function boot()
{
// Perform some action when the service is booted
view()->composer('view.name', function ($view) {
$view->with('data', 'value');
});
}
এখানে, boot()
মেথডের মাধ্যমে একটি ভিউ কম্পোজার তৈরি করা হয়েছে, যা নির্দিষ্ট ভিউয়ের জন্য ডাটা প্রদান করে।
Service Providers নিবন্ধন করার জন্য, আপনাকে config/app.php
ফাইলে প্রোভাইডারের ক্লাস নাম যুক্ত করতে হবে।
'providers' => [
/*
* Laravel Framework Service Providers...
*/
App\Providers\CustomServiceProvider::class,
],
এটি Laravel কে জানিয়ে দেয় যে প্রোভাইডারটি আপনার অ্যাপ্লিকেশন চালানোর সময় লোড করতে হবে।
Deferred Providers হলো এমন প্রোভাইডার যা শুধুমাত্র প্রয়োজন হলে লোড হয়। এগুলি অ্যাপ্লিকেশনের শুরুতে লোড করা হয় না, যা আপনার অ্যাপ্লিকেশনের লোড টাইম কমায়।
class CustomServiceProvider extends ServiceProvider
{
protected $defer = true; // Indicates that the provider is deferred
public function register()
{
$this->app->singleton('SomeService', function ($app) {
return new SomeService();
});
}
public function provides()
{
return ['SomeService']; // Specify the services provided
}
}
এখানে, protected $defer = true;
সেট করা হয়েছে, যা নির্দেশ করে যে এই প্রোভাইডারটি শুধুমাত্র যখন SomeService
প্রয়োজন হবে, তখনই লোড হবে।
Laravel-এর Service Providers অ্যাপ্লিকেশনের কেন্দ্রবিন্দু, যা সার্ভিস ও ফিচারগুলোকে রেজিস্টার এবং বুটস্ট্র্যাপ করতে সাহায্য করে। register()
এবং boot()
মেথডের মাধ্যমে কার্যক্রম সম্পন্ন করা হয়। Deferred Providers ব্যবহার করে আপনি অ্যাপ্লিকেশনকে আরো কার্যকরী ও গতিশীল করতে পারেন। Service Providers এর সঠিক ব্যবহার আপনার Laravel অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং মডুলার করে তোলে।
Laravel এ Facades একটি সহজ এবং সুবিধাজনক পদ্ধতি যা আপনাকে ক্লাসের মেথডগুলোকে স্ট্যাটিকভাবে কল করার অনুমতি দেয়। Facades মূলত অ্যাপ্লিকেশনের সার্ভিস কন্টেইনারের সাথে কাজ করে, যা তাদের ব্যবহার করা সহজ করে তোলে।
Facades ব্যবহার করার মাধ্যমে Laravel-এর প্যাকেজ, লাইব্রেরি এবং অন্যান্য কম্পোনেন্টগুলোকে সহজে অ্যাক্সেস করা যায়। এটি ডেভেলপমেন্টকে দ্রুততর করে এবং কোডের পাঠযোগ্যতা বৃদ্ধি করে। উদাহরণস্বরূপ, DB
, Cache
, এবং Auth
এর মতো কম্পোনেন্টগুলো Facades হিসেবে উপলব্ধ।
Facades ব্যবহার করার সময় কিছু বিষয় মনে রাখতে হবে:
উদাহরণ:
use Illuminate\Support\Facades\DB;
$users = DB::table('users')->get();
// Facade Example
use Illuminate\Support\Facades\Cache;
$cachedData = Cache::get('key');
// Dependency Injection Example
class SomeController extends Controller {
protected $cache;
public function __construct(Cache $cache) {
$this->cache = $cache;
}
public function index() {
$cachedData = $this->cache->get('key');
}
}
// Facade Example
use Illuminate\Support\Facades\Log;
Log::info('This is a log message.');
// Helper Function Example
log_info('This is a log message.');
Laravel-এর Facades প্রকৃতপক্ষে ক্লাসের স্ট্যাটিক ইন্টারফেস। প্রতিটি Facade একটি ক্লাসের সাথে যুক্ত, যা সার্ভিস কন্টেইনারের মাধ্যমে অ্যাক্সেস করা হয়। Facades ডাইনামিক্যালি স্ট্যাটিক মেথডগুলো কল করে, এবং Laravelের __callStatic
ম্যাজিক মেথড ব্যবহার করে ক্লাসের মেথডগুলোকে ক্যাপচার করে।
namespace Illuminate\Support\Facades;
class Cache extends Facade {
protected static function getFacadeAccessor() {
return 'cache'; // সার্ভিস কন্টেইনারের সাথে যোগাযোগের জন্য।
}
}
Laravel 7 এ "Real-Time Facades" প্রবর্তিত হয়, যা আপনাকে একটি ক্লাসের ইনস্ট্যান্সকে ব্যবহার করে সঠিক Facade তৈরি করতে দেয়। এটি আপনাকে আপনার নিজস্ব ক্লাসের জন্য Facade তৈরি করার ক্ষমতা দেয়।
class SomeService {
public function performAction() {
return 'Action performed!';
}
}
// Real-time Facade
$instance = new SomeService();
Facade::setFacadeApplication(app());
$result = Facade::getFacadeRoot($instance)->performAction();
Laravel-এর বিভিন্ন ফিচারের জন্য বিল্ট-ইন Facades প্রদান করা হয়। কিছু সাধারণ Facades এর মধ্যে রয়েছে:
// DB Facade
$users = DB::table('users')->where('active', 1)->get();
// Cache Facade
Cache::put('key', 'value', 600);
// Log Facade
Log::error('This is an error message.');
Laravel এর Facades ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা কোডের সাদৃশ্য এবং পড়ার যোগ্যতা বৃদ্ধি করে। Facades এবং Dependency Injection বা Helper Functions এর মধ্যে পার্থক্য জানা থাকা উচিত, যাতে আপনি আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুযায়ী সঠিক পদ্ধতি ব্যবহার করতে পারেন।
আরও দেখুন...